# generate_version_info.py
import subprocess
from pathlib import Path

import tomli

PROJECT_DIR = Path(__file__).parent
PKG_DIR = PROJECT_DIR / "jimuflow"
VERSION_FILE = PKG_DIR / "version_info.py"


def get_version():
    with open(PROJECT_DIR / "pyproject.toml", "rb") as f:
        data = tomli.load(f)
    return data["project"]["version"]


def get_git_info():
    def run_git(cmd):
        try:
            return subprocess.check_output(cmd, stderr=subprocess.DEVNULL).decode("utf-8").strip()
        except (subprocess.CalledProcessError, FileNotFoundError):
            return "unknown"

    return {
        "commit_hash": run_git(["git", "rev-parse", "HEAD"]),
        "branch": run_git(["git", "rev-parse", "--abbrev-ref", "HEAD"]),
        "tag": run_git(["git", "describe", "--tags", "--always"]),
        "commit_date": run_git(["git", "show", "-s", "--format=%ci", "HEAD"]),
    }


def main():
    version = get_version()
    git_info = get_git_info()

    content = f'''# Auto-generated during packaging, do not edit this file manually.
__version__ = "{version}"
__git_commit__ = "{git_info['commit_hash']}"
__git_branch__ = "{git_info['branch']}"
__git_tag__ = "{git_info['tag']}"
__git_commit_date__ = "{git_info['commit_date']}"
'''
    VERSION_FILE.parent.mkdir(exist_ok=True)
    VERSION_FILE.write_text(content)


if __name__ == "__main__":
    main()
